// 游戏实体的基类
class Entity {
    // 构造函数：初始化实体的基本属性
    constructor() {
        // 初始化位置(x,y)、年龄(age)和角度(angle)为0
        this.x = this.y = this.age = this.angle = 0;
        // 初始化分类桶数组，用于实体分类管理
        this.buckets = [];
    }

    // 更新函数：处理实体的逻辑更新
    // @param elapsed: 距离上一帧的时间间隔
    cycle(elapsed) {
        this.age += elapsed;
    }

    // 渲染函数：处理实体的视觉渲染
    // @param camera: 当前相机实体
    render(camera) {
        // 由子类实现具体的渲染逻辑
    }

    // 销毁函数：清理实体资源
    destroy() {
        // 由子类实现具体的销毁逻辑
    }

    // 等待实体达到指定年龄
    // @param duration: 等待的时间
    // @returns: Promise，当实体年龄超过指定值时解决
    agesBy(duration) {
        const age = this.age + duration;
        return this.world.waitFor(() => this.age > age);
    }

    // 等待实体被移除
    // @returns: Promise，当实体从世界中移除时解决
    removed() {
        return this.world.waitFor(() => !this.world.contains(this));
    }
}
